home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / gepackte_disketten / 1994 / 08_94_5.dms / 08_94_5.adf / term-4.0-Source.lha / SerialPanel.c < prev    next >
C/C++ Source or Header  |  1994-06-26  |  11KB  |  472 lines

  1. /*
  2. **    SerialPanel.c
  3. **
  4. **    Editing panel for serial configuration
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_BAUD=1000,GAD_DATABITS,GAD_PARITY,GAD_STOPBITS,GAD_HANDSHAKING,GAD_DUPLEX,GAD_BUFFERSIZE,GAD_BREAKLENGTH,
  13.         GAD_STRIP,GAD_HIGHSPEED,GAD_CHECK_CARRIER,GAD_SHARED,GAD_XON_XOFF,GAD_PASSTHROUGH,
  14.         GAD_DEVICE,GAD_SELECT,GAD_UNIT,GAD_QUANTUM,GAD_USE_OWNDEVUNIT,
  15.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  16.  
  17. STATIC LONG Sizes[] =
  18. {
  19.     16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288
  20. };
  21.  
  22. STATIC LONG __saveds
  23. ShowBaud(struct Gadget *SomeGadget,WORD Level)
  24. {
  25.     return(BaudRates[Level]);
  26. }
  27.  
  28. STATIC LONG __saveds
  29. ShowSize(struct Gadget *SomeGadget,WORD Level)
  30. {
  31.     return(Sizes[Level]);
  32. }
  33.  
  34. BYTE __regargs
  35. SerialPanel(struct Configuration *Config,BYTE *Default)
  36. {
  37.     struct LayoutHandle    *Handle;
  38.     BYTE             Cancel = FALSE;
  39.  
  40.     SaveConfig(Config,PrivateConfig);
  41.  
  42.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  43.         LH_LocaleHook,    &LocaleHook,
  44.     TAG_DONE))
  45.     {
  46.         struct Window    *Window;
  47.         LONG         Rate,Size,Quantum,Bits,StopBits,i;
  48.  
  49.         for(i = 0 ; i < NumBaudRates ; i++)
  50.         {
  51.             if(Config -> SerialConfig -> BaudRate == BaudRates[i])
  52.             {
  53.                 Rate = i;
  54.  
  55.                 break;
  56.             }
  57.         }
  58.  
  59.         for(i = 4 ; i < sizeof(Sizes) / sizeof(LONG) ; i++)
  60.         {
  61.             if(Config -> SerialConfig -> SerialBufferSize == Sizes[i])
  62.             {
  63.                 Size = i;
  64.  
  65.                 break;
  66.             }
  67.         }
  68.  
  69.         for(i = 0 ; i < sizeof(Sizes) / sizeof(LONG) ; i++)
  70.         {
  71.             if(Config -> SerialConfig -> Quantum == Sizes[i])
  72.             {
  73.                 Quantum = i;
  74.  
  75.                 break;
  76.             }
  77.         }
  78.  
  79.         if(Config -> SerialConfig -> HighSpeed)
  80.         {
  81.             Config -> SerialConfig -> BitsPerChar    = 8;
  82.             Config -> SerialConfig -> StopBits    = 1;
  83.             Config -> SerialConfig -> Parity    = PARITY_NONE;
  84.         }
  85.  
  86.         LT_New(Handle,
  87.             LA_Type,    VERTICAL_KIND,
  88.         TAG_DONE);
  89.         {
  90.             LT_New(Handle,
  91.                 LA_Type,    HORIZONTAL_KIND,
  92.                 LA_LabelID,    MSG_V36_0171,
  93.             TAG_DONE);
  94.             {
  95.                 LT_New(Handle,
  96. /*                    LA_LabelID,    MSG_V36_0171,*/
  97.                     LA_Type,    VERTICAL_KIND,
  98.                 TAG_DONE);
  99.                 {
  100.                     LT_New(Handle,
  101.                         LA_Type,        SLIDER_KIND,
  102.                         LA_LabelID,        MSG_SERIALPANEL_BAUD_RATE_GAD,
  103.                         LA_LONG,        &Rate,
  104.                         GTSL_Min,        0,
  105.                         GTSL_Max,        NumBaudRates - 1,
  106.                         GTSL_DispFunc,        ShowBaud,
  107.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  108.                     TAG_DONE);
  109.     
  110.                     Bits = Config -> SerialConfig -> BitsPerChar - 7;
  111.     
  112.                     LT_New(Handle,
  113.                         LA_Type,        CYCLE_KIND,
  114.                         LA_ID,            GAD_DATABITS,
  115.                         LA_LabelID,        MSG_SERIALPANEL_BITS_PER_CHAR_GAD,
  116.                         LA_LONG,        &Bits,
  117.                         GA_Disabled,        Config -> SerialConfig -> HighSpeed,
  118.                         LACY_FirstLabel,    MSG_SERIALPANEL_SEVEN_BITS_TXT,
  119.                         LACY_LastLabel,        MSG_SERIALPANEL_EIGHT_BITS_TXT,
  120.                     TAG_DONE);
  121.     
  122.                     LT_New(Handle,
  123.                         LA_Type,        CYCLE_KIND,
  124.                         LA_ID,            GAD_PARITY,
  125.                         LA_LabelID,        MSG_SERIALPANEL_PARITY_GAD,
  126.                         LA_BYTE,        &Config -> SerialConfig -> Parity,
  127.                         GA_Disabled,        Config -> SerialConfig -> HighSpeed,
  128.                         LACY_FirstLabel,    MSG_SERIALPANEL_NO_PARITY_TXT,
  129.                         LACY_LastLabel,        MSG_SERIALPANEL_SPACE_TXT,
  130.                     TAG_DONE);
  131.     
  132.                     StopBits = Config -> SerialConfig -> StopBits - 1;
  133.     
  134.                     LT_New(Handle,
  135.                         LA_Type,        CYCLE_KIND,
  136.                         LA_ID,            GAD_STOPBITS,
  137.                         LA_LabelID,        MSG_SERIALPANEL_STOP_BITS_GAD,
  138.                         LA_LONG,        &StopBits,
  139.                         GA_Disabled,        Config -> SerialConfig -> HighSpeed,
  140.                         LACY_FirstLabel,    MSG_SERIALPANEL_ONE_BIT_TXT,
  141.                         LACY_LastLabel,        MSG_SERIALPANEL_TWO_BITS_TXT,
  142.                     TAG_DONE);
  143.     
  144.                     LT_New(Handle,
  145.                         LA_Type,        CYCLE_KIND,
  146.                         LA_LabelID,        MSG_SERIALPANEL_HANDSHAKING_GAD,
  147.                         LA_BYTE,        &Config -> SerialConfig -> HandshakingProtocol,
  148.                         LACY_FirstLabel,    MSG_SERIALPANEL_HANDSHAKING_NONE_TXT,
  149.                         LACY_LastLabel,        MSG_SERIALPANEL_HANDSHAKING_RTS_CTS_DSR_TXT,
  150.                     TAG_DONE);
  151.     
  152.                     LT_New(Handle,
  153.                         LA_Type,        CYCLE_KIND,
  154.                         LA_LabelID,        MSG_SERIALPANEL_DUPLEX_GAD,
  155.                         LA_BYTE,        &Config -> SerialConfig -> Duplex,
  156.                         LACY_FirstLabel,    MSG_SERIALPANEL_DUPLEX_FULL_TXT,
  157.                         LACY_LastLabel,        MSG_SERIALPANEL_DUPLEX_HALF_TXT,
  158.                     TAG_DONE);
  159.     
  160.                     LT_New(Handle,
  161.                         LA_Type,        SLIDER_KIND,
  162.                         LA_LabelID,        MSG_SERIALPANEL_BUFFER_SIZE_GAD,
  163.                         LA_LONG,        &Size,
  164.                         GTSL_Min,        4,
  165.                         GTSL_Max,        (sizeof(Sizes) / sizeof(LONG)) - 1,
  166.                         GTSL_DispFunc,        ShowSize,
  167.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  168.                     TAG_DONE);
  169.     
  170.                     LT_New(Handle,
  171.                         LA_Type,        INTEGER_KIND,
  172.                         LA_LabelID,        MSG_SERIALPANEL_BREAK_LENGTH_GAD,
  173.                         LA_LONG,        &Config -> SerialConfig -> BreakLength,
  174.                         GTIN_MaxChars,        8,
  175.                     TAG_DONE);
  176.     
  177.                     LT_EndGroup(Handle);
  178.                 }
  179.  
  180.                 LT_New(Handle,
  181. /*                    LA_LabelID,    MSG_V36_0176,*/
  182.                     LA_Type,    VERTICAL_KIND,
  183.                 TAG_DONE);
  184.                 {
  185.                     LT_New(Handle,
  186.                         LA_Type,        CHECKBOX_KIND,
  187.                         LA_LabelID,        MSG_SERIALPANEL_STRIP_BIT_8_GAD,
  188.                         LA_BYTE,        &Config -> SerialConfig -> StripBit8,
  189.                     TAG_DONE);
  190.  
  191.                     LT_New(Handle,
  192.                         LA_Type,        CHECKBOX_KIND,
  193.                         LA_LabelID,        MSG_SERIALPANEL_SHARED_ACCESS_GAD,
  194.                         LA_BYTE,        &Config -> SerialConfig -> Shared,
  195.                     TAG_DONE);
  196.  
  197.                     LT_New(Handle,
  198.                         LA_Type,        CHECKBOX_KIND,
  199.                         LA_LabelID,        MSG_SERIALPANEL_XON_XOFF_GAD,
  200.                         LA_BYTE,        &Config -> SerialConfig -> xONxOFF,
  201.                     TAG_DONE);
  202.  
  203.                     LT_New(Handle,
  204.                         LA_Type,        CHECKBOX_KIND,
  205.                         LA_LabelID,        MSG_SERIALPANEL_PASS_XON_XOFF_THROUGH_GAD,
  206.                         LA_BYTE,        &Config -> SerialConfig -> PassThrough,
  207.                     TAG_DONE);
  208.  
  209.                     LT_New(Handle,
  210.                         LA_Type,        CHECKBOX_KIND,
  211.                         LA_LabelID,        MSG_SERIALPANEL_CHECK_CARRIER_GAD,
  212.                         LA_BYTE,        &Config -> SerialConfig -> CheckCarrier,
  213.                     TAG_DONE);
  214.  
  215.                     LT_New(Handle,
  216.                         LA_Type,        CHECKBOX_KIND,
  217.                         LA_LabelID,        MSG_SERIALPANEL_HIGH_SPEED_MODE_GAD,
  218.                         LA_BYTE,        &Config -> SerialConfig -> HighSpeed,
  219.                         LA_ID,            GAD_HIGHSPEED,
  220.                     TAG_DONE);
  221.  
  222.                     LT_New(Handle,
  223.                         LA_Type,        CHECKBOX_KIND,
  224.                         LA_LabelID,        MSG_SERIALPANEL_USE_OWNDEVUNIT_TXT,
  225.                         LA_BYTE,        &Config -> SerialConfig -> UseOwnDevUnit,
  226.                         LA_ID,            GAD_USE_OWNDEVUNIT,
  227.                     TAG_DONE);
  228.  
  229.                     LT_New(Handle,
  230.                         LA_Type,        SLIDER_KIND,
  231.                         LA_LabelID,        MSG_SERIALPANEL_QUANTUM_GAD,
  232.                         LA_LONG,        &Quantum,
  233.                         LA_Chars,        6,
  234.                         GTSL_Min,        0,
  235.                         GTSL_Max,        (sizeof(Sizes) / sizeof(LONG)) - 1,
  236.                         GTSL_Level,        Quantum,
  237.                         GTSL_DispFunc,        ShowSize,
  238.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  239.                     TAG_DONE);
  240.  
  241.                     LT_EndGroup(Handle);
  242.                 }
  243.  
  244.                 LT_EndGroup(Handle);
  245.             }
  246.  
  247.             LT_New(Handle,
  248.                 LA_LabelID,    MSG_V36_0179,
  249.                 LA_Type,    VERTICAL_KIND,
  250.             TAG_DONE);
  251.             {
  252.                 LT_New(Handle,
  253.                     LA_Type,        STRING_KIND,
  254.                     LA_LabelID,        MSG_SERIALPANEL_SERIAL_DEVICE_GAD,
  255.                     LA_Chars,        20,
  256.                     LA_STRPTR,        Config -> SerialConfig -> SerialDevice,
  257.                     GTST_MaxChars,        255,
  258.                     LAST_Picker,        TRUE,
  259.                     LA_ID,            GAD_DEVICE,
  260.                 TAG_DONE);
  261.  
  262.                 LT_New(Handle,
  263.                     LA_Type,        INTEGER_KIND,
  264.                     LA_LabelID,        MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD,
  265.                     LA_LONG,        &Config -> SerialConfig -> UnitNumber,
  266.                     LA_ID,            GAD_UNIT,
  267.                     LAIN_UseIncrementers,    TRUE,
  268.                     GTIN_MaxChars,        8,
  269.                 TAG_DONE);
  270.  
  271.                 LT_EndGroup(Handle);
  272.             }
  273.  
  274.             LT_New(Handle,
  275.                 LA_Type,VERTICAL_KIND,
  276.             TAG_DONE);
  277.             {
  278.                 LT_New(Handle,
  279.                     LA_Type,    XBAR_KIND,
  280.                     LAXB_FullSize,    TRUE,
  281.                 TAG_DONE);
  282.  
  283.                 LT_EndGroup(Handle);
  284.             }
  285.  
  286.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  287.                 LAGR_SameSize,    TRUE,
  288.                 LAGR_Spread,    TRUE,
  289.             TAG_DONE);
  290.             {
  291.                 LT_New(Handle,
  292.                     LA_Type,    BUTTON_KIND,
  293.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  294.                     LA_ID,        GAD_USE,
  295.                     LABT_ReturnKey,    TRUE,
  296.                     LABT_ExtraFat,    TRUE,
  297.                 TAG_DONE);
  298.  
  299.                 if(Default)
  300.                 {
  301.                     LT_New(Handle,
  302.                         LA_Type,    BUTTON_KIND,
  303.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  304.                         LA_ID,        GAD_DEFAULT,
  305.                         LABT_ExtraFat,    TRUE,
  306.                     TAG_DONE);
  307.                 }
  308.  
  309.                 LT_New(Handle,
  310.                     LA_Type,    BUTTON_KIND,
  311.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  312.                     LA_ID,        GAD_CANCEL,
  313.                     LABT_EscKey,    TRUE,
  314.                     LABT_ExtraFat,    TRUE,
  315.                 TAG_DONE);
  316.  
  317.                 LT_EndGroup(Handle);
  318.             }
  319.  
  320.             LT_EndGroup(Handle);
  321.         }
  322.  
  323.         if(Window = LT_Layout(Handle,LocaleString(MSG_SERIALPANEL_SERIAL_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  324.             LAWN_HelpHook,        &GuideHook,
  325.             WA_DepthGadget,        TRUE,
  326.             WA_CloseGadget,        TRUE,
  327.             WA_DragBar,        TRUE,
  328.             WA_RMBTrap,        TRUE,
  329.             WA_Activate,        TRUE,
  330.         TAG_DONE))
  331.         {
  332.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH];
  333.             struct IntuiMessage    *Message;
  334.             BOOLEAN             Done = FALSE;
  335.             ULONG             MsgClass,
  336.                          MsgQualifier;
  337.             UWORD             MsgCode;
  338.             struct Gadget        *MsgGadget;
  339.  
  340.             GuideContext(CONTEXT_SERIAL);
  341.  
  342.             PushWindow(Window);
  343.  
  344.             LT_ShowWindow(Handle,TRUE);
  345.  
  346.             do
  347.             {
  348.                 if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  349.                 {
  350.                     SaveConfig(PrivateConfig,Config);
  351.  
  352.                     break;
  353.                 }
  354.  
  355.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  356.                 {
  357.                     MsgClass    = Message -> Class;
  358.                     MsgQualifier    = Message -> Qualifier;
  359.                     MsgCode        = Message -> Code;
  360.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  361.  
  362.                     GT_ReplyIMsg(Message);
  363.  
  364.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  365.  
  366.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  367.                     {
  368.                         SaveConfig(PrivateConfig,Config);
  369.  
  370.                         Done = TRUE;
  371.                     }
  372.  
  373.                     if(MsgClass == IDCMP_GADGETUP)
  374.                     {
  375.                         switch(MsgGadget -> GadgetID)
  376.                         {
  377.                             case GAD_HIGHSPEED:
  378.  
  379.                                 if(MsgCode)
  380.                                 {
  381.                                     LT_SetAttributes(Handle,GAD_PARITY,
  382.                                         GA_Disabled,    TRUE,
  383.                                         GTCY_Active,    PARITY_NONE,
  384.                                     TAG_DONE);
  385.  
  386.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  387.                                         GA_Disabled,    TRUE,
  388.                                         GTCY_Active,    0,
  389.                                     TAG_DONE);
  390.  
  391.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  392.                                         GA_Disabled,    TRUE,
  393.                                         GTCY_Active,    1,
  394.                                     TAG_DONE);
  395.                                 }
  396.                                 else
  397.                                 {
  398.                                     LT_SetAttributes(Handle,GAD_PARITY,
  399.                                         GA_Disabled,    FALSE,
  400.                                     TAG_DONE);
  401.  
  402.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  403.                                         GA_Disabled,    FALSE,
  404.                                     TAG_DONE);
  405.  
  406.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  407.                                         GA_Disabled,    FALSE,
  408.                                     TAG_DONE);
  409.                                 }
  410.  
  411.                                 break;
  412.  
  413.                             case GAD_USE:
  414.  
  415.                                 Config -> SerialConfig -> BaudRate = BaudRates[Rate];
  416.                                 Config -> SerialConfig -> SerialBufferSize = Sizes[Size];
  417.                                 Config -> SerialConfig -> Quantum = Sizes[Quantum];
  418.                                 Config -> SerialConfig -> BitsPerChar = Bits + 7;
  419.                                 Config -> SerialConfig -> StopBits = StopBits + 1;
  420.  
  421.                                 Done = TRUE;
  422.                                 break;
  423.  
  424.                             case GAD_CANCEL:
  425.  
  426.                                 SaveConfig(PrivateConfig,Config);
  427.  
  428.                                 Cancel = Done = TRUE;
  429.                                 break;
  430.  
  431.                             case GAD_DEFAULT:
  432.  
  433.                                 *Default = TRUE;
  434.  
  435.                                 Done = TRUE;
  436.                                 break;
  437.                         }
  438.                     }
  439.  
  440.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget -> GadgetID == GAD_DEVICE)
  441.                     {
  442.                         LT_LockWindow(Window);
  443.  
  444.                         strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_DEVICE));
  445.                         strcpy(SharedBuffer,DummyBuffer);
  446.  
  447.                         if(PickFile(Window,"Devs:","#?.device",LocaleString(MSG_SERIALPANEL_SELECT_DEVICE_TXT),SharedBuffer,NT_DEVICE))
  448.                         {
  449.                             if(Stricmp(DummyBuffer,SharedBuffer))
  450.                                 LT_SetAttributes(Handle,GAD_DEVICE,GTST_String,SharedBuffer,TAG_DONE);
  451.                         }
  452.  
  453.                         LT_UnlockWindow(Window);
  454.  
  455.                         LT_ShowWindow(Handle,TRUE);
  456.                     }
  457.                 }
  458.             }
  459.             while(!Done);
  460.  
  461.             PopWindow();
  462.         }
  463.  
  464.         LT_DeleteHandle(Handle);
  465.     }
  466.  
  467.     if(Default)
  468.         return((BYTE)(!Cancel));
  469.     else
  470.         return((BYTE)memcmp(PrivateConfig -> SerialConfig,Config -> SerialConfig,sizeof(struct SerialSettings)));
  471. }
  472.